﻿using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Devart.Data.SQLite;
using Devart.Data;
using System.Data;

namespace JMI_Nucleo.Classe
{
    public static class LogLocal
    {
        private static mLog info;
        private static SQLiteConnection conn = null;
        private static SQLiteCommand cmd = null;
        private static string arquivo = String.Empty;

        public static mLog Info 
        {
            get
            {
                return info;
            }
            set
            {
                info = value;
            }
        }
        private static bool CriaBaseSQLite()
        {
            bool retorno = true;
            conn = new SQLiteConnection();
            cmd = new SQLiteCommand();
            JMIUtil objUtil = new JMIUtil();
            string cmdSQL = String.Empty;

            arquivo = objUtil.GetCaminhoAplicacao();
            arquivo += @"Logbd.db3";

            if (!File.Exists(arquivo))
            {
                SQLiteConnection.CreateFile(arquivo);

                conn.DataSource = arquivo;
                conn.Open();

                cmdSQL = @"CREATE  TABLE  IF NOT EXISTS log(ID INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
                           DATAHORA DATETIME NOT NULL,
                           TIPO VARCHAR(30) NOT NULL,
                           TABELA VARCHAR(60),
                           METODO VARCHAR(255),
                           MENSAGEM TEXT check(typeof(MENSAGEM) = 'text'),
                           STACKTRACE TEXT check(typeof(STACKTRACE) = 'text'))";

                try
                {
                    cmd.Connection = conn;
                    cmd.CommandType = CommandType.Text;
                    cmd.CommandText = cmdSQL;
                    cmd.Prepare();
                    cmd.ExecuteNonQuery();
                }
                catch (Exception e)
                {
                    retorno = false;
                    throw new Exception(e.Message);                    
                }
                conn.Close();                
            }
            return retorno;
        }
        private static string ToCSV() 
        {
            string aux = Info.DataHora.ToString("dd/mm/yyyy ' - ' hh:mm") + ";" +
                         Info._TipoErro.ToString() + ";" +
                         Info.Tabela + ";" +
                         Info.Metodo + ";" +
                         Info.Mensagem + ";" +
                         Info.StackTrace;
            return aux;
        }
        public static void Gravar()
        {
            JMIUtil jmiUtil = new JMIUtil();
            SQLiteParameter parametro = null;
            if (CriaBaseSQLite())
            {
                string cmdSQL = @"INSERT INTO log(DATAHORA, TIPO, TABELA, METODO, MENSAGEM, STACKTRACE)
                                  VALUES(@DATAHORA, @TIPO, @TABELA, @METODO, @MENSAGEM, @STACKTRACE)";

                conn = new SQLiteConnection();
                cmd = new SQLiteCommand();
                conn.DataSource = arquivo;
                conn.Open();

                cmd.Connection = conn;
                cmd.CommandType = CommandType.Text;
                cmd.CommandText = cmdSQL;

                parametro = new SQLiteParameter();
                parametro.ParameterName = "@DATAHORA";
                parametro.SQLiteType = SQLiteType.DateTime;
                parametro.Value = DateTime.Today;
                cmd.Parameters.Add(parametro);

                parametro = new SQLiteParameter();
                parametro.ParameterName = "@TIPO";
                parametro.SQLiteType = SQLiteType.Text;
                parametro.Value = Info._TipoErro.ToString();
                cmd.Parameters.Add(parametro);

                parametro = new SQLiteParameter();
                parametro.ParameterName = "@TABELA";
                parametro.SQLiteType = SQLiteType.Text;
                parametro.Value = Info.Tabela;
                cmd.Parameters.Add(parametro);

                parametro = new SQLiteParameter();
                parametro.ParameterName = "@METODO";
                parametro.SQLiteType = SQLiteType.Text;
                parametro.Value = Info.Metodo;
                cmd.Parameters.Add(parametro);

                parametro = new SQLiteParameter();
                parametro.ParameterName = "@MENSAGEM";
                parametro.SQLiteType = SQLiteType.Text;
                parametro.Value = Info.Mensagem;
                cmd.Parameters.Add(parametro);

                parametro = new SQLiteParameter();
                parametro.ParameterName = "@STACKTRACE";
                parametro.SQLiteType = SQLiteType.Text;
                parametro.Value = Info.StackTrace;
                cmd.Parameters.Add(parametro);

                cmd.Prepare();
                cmd.ExecuteNonQuery();

                cmd.Dispose();
                conn.Close();
            }
        }         
    }
}
